package com.night.icm.service.core.service;

import com.night.icm.common.utils.PageDataDTO;
import com.night.icm.model.core.UserDTO;

import java.util.List;

/**
 * UserService
 *
 * @author Liao ZhiYong
 * @date 2019/12/10
 */
public interface UserService {

    /**
     * 新建用户
     *
     * @param createInfo 新建数据
     * @return 用户信息
     */
    UserDTO createUser(UserDTO createInfo);

    /**
     * 分页查询用户信息
     *
     * @param page     页号，从0开始
     * @param size     每页纪录条数
     * @param sort     排序字段, 例如：字段1,asc,字段2,desc
     * @param username 用户名，支持模糊查询
     * @param role     角色名，支持模糊查询
     * @return 用户分页数据
     */
    PageDataDTO<UserDTO> findOnePage(int page, int size, String sort, String username, String role);

    /**
     * 根据id删除用户
     *
     * @param id 用户id
     */
    void deleteById(String id);

    /**
     * 更新用户信息
     *
     * @param id      用户id
     * @param userDTO 用户信息
     * @return 更新后用户信息
     */
    UserDTO update(String id, UserDTO userDTO);

    /**
     * 查找所有用户
     *
     * @return userDTO
     */
    List<UserDTO> findAll();

    /**
     * 通过Id查找用户
     *
     * @param id userID
     * @return user
     */
    UserDTO findById(String id);

    /**
     * 通过用户名name查找用户
     *
     * @param name 用户名
     * @return 用户
     */
    UserDTO findByName(String name);

    /**
     * 修改用户密码
     *
     * @param id          用户id
     * @param oldPassword 原密码
     * @param newPassword 新密码
     * @return 是否成功
     */
    Boolean updateUserPassword(String id, String oldPassword, String newPassword);
}
